package main

import "fmt"

func main() {
	/*
		函数指针：一个指针，指向了一个函数的指针
			因为 go语言 中，function，默认看做一个指针，没有*


		引用类型的数据：slice, map, function...
		指针函数：一个函数，该函数的返回值是一个指针
	*/
	var a func()
	a = func1
	a()

	arr1 := func2()
	fmt.Printf("arr1 的类型：%T,地址：%p,数值：%v\n", arr1, &arr1, arr1) //arr1 的类型：[4]int,地址：0xc000014220,数值：[1 2 3 4]

	arr2 := func3()
	fmt.Printf("arr2 的类型：%T,地址：%p,数值：%v\n", arr2, &arr2, arr2) //arr2 的类型：*[4]int,地址：0xc00000a030,数值：&[5 6 7 8]
}

func func1() {
	fmt.Println("fun1...")
}

// 普通函数
func func2() [4]int {
	arr := [4]int{1, 2, 3, 4}
	return arr
}

// 指针函数
func func3() *[4]int {
	arr := [4]int{5, 6, 7, 8}
	return &arr
}
